package com.example.singing.manager;

import com.example.singing.model.User;
import com.example.singing.util.FileUtil;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * 用户管理类
 */
public class UserManager {
    private static final String USER_FILE = "users.dat";
    private List<User> users = new ArrayList<>();
    
    public UserManager() {
        System.out.println("=== UserManager 初始化 ===");
        loadUsers();
        System.out.println("当前用户数量: " + users.size());
        for (User user : users) {
            System.out.println("用户: " + user.getUsername() + ", 角色: " + user.getRole());
        }
    }
    


    /**
     * 添加用户
     */
    public boolean addUser(User user) {
        System.out.println("尝试添加用户: " + user.getUsername() + ", 角色: " + user.getRole());
        if (getUserByUsername(user.getUsername()) != null) {
            System.out.println("添加用户失败: 用户名已存在");
            return false; // 用户名已存在
        }
        users.add(user);
        saveUsers();
        System.out.println("添加用户成功: " + user.getUsername());
        return true;
    }

    /**
     * 根据用户名获取用户
     */
    public User getUserByUsername(String username) {
        System.out.println("根据用户名查找用户: " + username);
        for (User user : users) {
            if (user.getUsername().equals(username)) {
                System.out.println("找到用户: " + username + ", 角色: " + user.getRole());
                return user;
            }
        }
        System.out.println("未找到用户: " + username);
        return null;
    }

    /**
     * 验证用户登录
     */
    public User validateLogin(String username, String password) {
        System.out.println("=== 登录验证开始 ===");
        System.out.println("验证用户名: " + username);
        // 打印密码的长度（不打印实际密码）
        System.out.println("密码长度: " + (password != null ? password.length() : 0));
        
        User user = getUserByUsername(username);
        if (user != null) {
            System.out.println("用户存在，进行密码验证");
            System.out.println("存储的密码长度: " + user.getPassword().length());
            boolean passwordMatch = user.getPassword().equals(password);
            System.out.println("密码匹配结果: " + passwordMatch);
            if (passwordMatch) {
                System.out.println("登录验证成功: " + username);
                return user;
            } else {
                System.out.println("登录验证失败: 密码不匹配");
            }
        } else {
            System.out.println("登录验证失败: 用户不存在");
        }
        System.out.println("=== 登录验证结束 ===");
        return null;
    }

    /**
     * 获取所有用户
     */
    public List<User> getAllUsers() {
        System.out.println("获取所有用户列表，当前数量: " + users.size());
        return new ArrayList<>(users);
    }

    /**
     * 保存用户数据
     */
    private void saveUsers() {
        System.out.println("保存用户数据到文件: " + USER_FILE);
        FileUtil.saveData(users, USER_FILE);
    }

    /**
     * 加载用户数据
     */
    @SuppressWarnings("unchecked")
    private void loadUsers() {
        System.out.println("从文件加载用户数据: " + USER_FILE);
        Object data = FileUtil.loadData(USER_FILE);
        if (data != null) {
            users = (List<User>) data;
            System.out.println("用户数据加载成功，共加载 " + users.size() + " 个用户");
        } else {
            System.out.println("用户数据加载失败或文件不存在，使用空列表");
        }
    }
}